/**
 * Nombre : AccesoAction.java 
 * Versi�n : 1.1 
 * Creaci�n : 12/11/2008 
 * Autor : Orlando Pihue Montoya 
 * Usuario : P020912 
 * Finalidad : Consulta de Perfiles de Usuario
 * 
 * Modificacion: << fecha de modificaci�n>> 
 * Autor : <<quien actualizo el archivo>> 
 * Usuario : <<c�digo de usuario modificador>> 
 * Detalle : <<descripci�n de la modificaci�n>>
 */
package igrupobbva.pe.sistemareniec.actions;

import igrupobbva.pe.sistemareniec.forms.LogueoForm;
import igrupobbva.pe.sistemareniec.util.ParametroUtil;
import igrupobbva.pe.sistemareniec.util.ServiciosSeguridadBbva;

import java.net.InetAddress;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.grupobbva.bc.per.tele.ldap.directorio.IILDPeUsuario;
import com.grupobbva.iici.serializable.PermisoPerfil;
import com.grupobbva.iici.service.CorporativaService;
import com.grupobbva.iici.service.PerfilService;
import com.grupobbva.iici.util.ConstantesUtil;
import com.grupobbva.iici.util.SpringUtils;
import com.grupobbva.pe.SIR.ents.header.RequestHeader;
import com.ibm.www.operations.Cabecera;
//import org.springframework.web.bind.annotation.RequestHeader;
public class AccesoAction extends DispatchAction {
	static Logger logger = Logger.getLogger(AccesoAction.class.getName());
	
	private CorporativaService corporativaService;
	
	private PerfilService perfilService;
 
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {		
		corporativaService 	= SpringUtils.getBean(request, CorporativaService.class);
		perfilService 		= SpringUtils.getBean(request, PerfilService.class);
		
		ActionErrors errors = new ActionErrors();
		ActionForward forward = new ActionForward(); // return value
		LogueoForm logueoForm = (LogueoForm) form;
		Vector listMenu = null;
		PermisoPerfil permisoPerfil = null;
		forward = mapping.findForward("ok");
		IILDPeUsuario user = null;
		String usuario = ""; 
		String flagW="0";
		request.setAttribute("flagLogueo", "1");
		try { 
			ServiciosSeguridadBbva ssBbva = new ServiciosSeguridadBbva(request);
			
			if (ssBbva != null) {
				ssBbva.obtener_ID();				
				usuario  =  ssBbva.getUsuario().toUpperCase();	
				
				user = IILDPeUsuario.recuperarUsuario(usuario);				
				request.getSession().setAttribute("codOficina", user.getBancoOficina().getCodigo());
				request.getSession().setAttribute("desOficina", user.getBancoOficina().getDescripcion());
				request.getSession().setAttribute("registro", usuario);
				request.getSession().setAttribute(
						"nombre",user.getNombre() + " " + user.getApellido1() + " "
								+ user.getApellido2());					
				
				try
				{
					request.getSession().setAttribute("log",corporativaService.obtenerPorCodigo(ConstantesUtil.LOG).getValor1());
					request.getSession().setAttribute("txt",corporativaService.obtenerPorCodigo(ConstantesUtil.TXT).getValor1());	
					int root=corporativaService.obtenerPorCodigo(ConstantesUtil.ROOT).getValor1().indexOf(usuario);
					
					request.getSession().setAttribute("root",String.valueOf(root));
				}
				catch (Exception e)
				{
					errors.add("name", new ActionError("id"));
					logger.error("[MGLHPM] Error: ", e);
				}
				String cis=corporativaService.obtenerPorCodigo(ConstantesUtil.CIS).getValor1();
				permisoPerfil =perfilService.obtenerPermisoPerfilxTipAccxValorRCP(usuario, user
						.getCargo().getCodigo(), user.getBancoOficina().getCodigo());
				
				//TODO [MGLHPM]	
				
				ParametroUtil parametroUtil = ParametroUtil.getInstance();					
				
				RequestHeader cabecera2 = new RequestHeader();
				cabecera2.setCanal(parametroUtil.getValue("canal"));
				cabecera2.setCodigoAplicacion(parametroUtil.getValue("codigoAplicacion"));
				cabecera2.setIdEmpresa(parametroUtil.getValue("idEmpresa"));
				cabecera2.setUsuario( StringUtils.trimToEmpty(usuario) );		
				
				//cabecera2.setCodigoInterfaz(parametroUtil.getValue("codigoAplicacion"));
				//cabecera2.setFechaHoraEnvio("01/01/2010 10:20:10");
				//cabecera2.setIdTransaccion("IDTRAN");
				
				request.getSession().setAttribute("cabecera2", cabecera2);
				
				InetAddress ip;
				
				ip = InetAddress.getLocalHost();
				logger.info("Direccion IP: " + ip.getHostAddress());
				
				logger.info("MGLHPM- INICIO AccesoAction");
				
				logger.info("MGLHPM- Cabecera: " + ToStringBuilder.reflectionToString(cabecera2, ToStringStyle.MULTI_LINE_STYLE));
				
				logger.info("MGLHPM- FIN AccesoAction");
				
				/**Cabecera:: **/
				Cabecera cabecera=new Cabecera() ;
				cabecera.setVersion("0001");
				cabecera.setLongCabecera((Integer.parseInt("0128")));
				cabecera.setTipoServicio("000");
				cabecera.setLongTotalTrama((Integer.parseInt("000000143")));
				cabecera.setFragmentacion("                      ");
				cabecera.setTTL((Integer.parseInt("000000000")));
				cabecera.setTipoConsulta("");
				cabecera.setCaracVerificacion("RENIECPERURENIEC");
				cabecera.setCodInstSolicitante(ConstantesUtil.completarSpace(cis.trim(),10));		
				cabecera.setCodServReniec("RENIEC001 ");
				cabecera.setAgenciaInstSolic("Agencia1  ");
			    cabecera.setUsuarioFinalInstSol("Usuario1  ");
				cabecera.setHostFinalInstSol("Pc1       ");
				cabecera.setReservado("          ");
				
				request.getSession().setAttribute("cabecera", cabecera);
				
				if (permisoPerfil != null) {
					request.getSession().setAttribute("acceso",
							permisoPerfil.getCodPerfil());
		
					listMenu = perfilService.obtenerCodigoPerfil(permisoPerfil
							.getCodPerfil());
					
					request.setAttribute("listaAccesoMenu", listMenu);
					flagW="1";
				} else {
					flagW="0";
					forward = mapping.findForward("login");			
					request.setAttribute("txtError", "Usuario no Tiene Permiso Para acceder al Sistema");
				}
			} else {
				forward = mapping.findForward("login");				
				request.setAttribute("mensaje", "Usuario no Existe");
			}
			request.setAttribute("flagLogueo",flagW);
			

		} catch (Exception e) {
			errors.add("name", new ActionError("id"));
			forward = mapping.findForward("login");			
			logger.info("[MGLHPM] Error: ", e);
		}
		return (forward);

	}

	

}
